This report summarizes the results of an ongoing study focused on understanding the impact of the COVID-19 pandemic on Critical Care research. It includes data submitted by 126 centres between 2020-03-23 and 2020-08-10.
Participating centres
ICU location

| CAN |
37 |
| USA |
30 |
| AUS |
21 |
| FRA |
5 |
| NLD |
5 |
| NZL |
4 |
| ARG |
2 |
| GBR |
2 |
| IDN |
2 |
| ITA |
2 |
| MEX |
2 |
| SGP |
2 |
| THA |
2 |
| BRA |
1 |
| COL |
1 |
| DNK |
1 |
| ECU |
1 |
| IND |
1 |
| LBN |
1 |
| MYS |
1 |
| PAK |
1 |
| URY |
1 |
| VNM |
1 |
ICU population

Centre type

Surveys per month
| March |
107 |
| April |
104 |
| May |
101 |
| June |
91 |
| July |
78 |
COVID-19
Are there any patients in your hospital with CONFIRMED COVID-19? (n = 477 surveys)

Are there any patients in your ICU with CONFIRMED COVID-19? (n = 477 surveys)

Is your ICU currently enrolling patients in any COVID-19 specific studies? (n = 471 surveys)

What types of COVID-19 specific research studies are currently enrolling patients in your ICU? (n = 478 surveys) (Question added after start of the study)
| March 2020 |
14 |
1 |
25 |
1 |
| April 2020 |
26 |
12 |
58 |
3 |
| May 2020 |
39 |
14 |
68 |
2 |
| June 2020 |
30 |
8 |
61 |
4 |
| July 2020 |
30 |
10 |
55 |
2 |
Is your ICU currently preparing for any COVID-19 specific studies? (Question added after start of the study)

Institutional policies
Is your REB/IRB prioritizing approval or willing to expedite approval of COVID-19 protocols? (n = 478 surveys)

Impact on research
Because of COVID-19 or preparation for it, has your ICU:
Suspended recruitment for any studies? (n = 479 surveys)

Modified recruitment for current studies? (n = 478 surveys)

Delayed the initiation of new (non-COVID-19) studies? (n = 475 surveys)

Enrolled MORE patients in studies because of increased patient volume? (n = 477 surveys)

Enrolled FEWER patients in studies because of increased patient volume? (n = 477 surveys)

Changed the approach to co-enrollment in studies? (n = 477 surveys)

Changed or stopped collection of biologic samples? (n = 477 surveys)

Other effects on studies in your ICU? (n = 464 surveys)

Reasons for impact
Because of COVID-19 or preparation for it, how much of an effect have the following had on research in your ICU?
Research staff WITH a clinical background are needed to work clinically (n = 478 surveys)

Research staff WITHOUT a clinical background are needed to help with hospital activities (n = 475 surveys)

Investigators are needed to work clinically (n = 383 surveys) (Question added after start of the study)

Research staff are concerned about their safety working during outbreak (n = 477 surveys)

Your pediatric ICU is admitting (or planning to admit) adults (n = 227 surveys) (Question added after start of the study)

Not enough research staff for increased number of COVID-19 studies (n = 472 surveys)

Not enough research staff for increased number of eligible patients (n = 477 surveys)

Infection control policies limiting research staff access to the ICU (n = 476 surveys)

Infection control policies limiting research staff access to patients with confirmed or suspected COVID-19 (n = 477 surveys)

Clinical staff are too busy to complete research-related tasks (n = 477 surveys)

Research facilities for processing or storage of biological samples are closed or have reduced capacity (n = 417 surveys) (Question added after start of the study)

COVID-19 specific research is prioritized over other research (n = 475 surveys)

To join this study
On behalf of the Canadian Critical Care Trials Group and Canadian Critical Care Research Coordinators group, we invite your site to participate in a short longitudinal survey of the effects of COVID-19 on critical care research.
Use this link to send us the name and email of the person who will complete the survey on behalf of your centre: http://bit.ly/3aNqo8Z
They’ll receive a separate email with the survey within 24 hours and will get:
1) A 3-question survey about your ICU
2) A short (<10 min) monthly survey about the impact of COVID-19 on research in your ICU
About this study
Background: As we prepare for and manage COVID-19 patients in our ICUs, we realize both the importance of studying this disease and our role as global leaders in critical care research. From our experiences with SARS and H1N1, we also know that COVID-19 may both enhance and constrain current critical care research projects.
Objectives: The aims of this study are to:
1. Characterize current research activities in ICUs
2. Describe the effects of COVID-19 (and preparations) on research in ICUs, specifically to: identify new research started due to COVID-19; describe any impact on existing research activities; and identify COVID-19 hospital or ICU policies affecting research.
Methods: If you agree for your site to participate, you or your delegate will receive:
• A link to a single, brief survey (3 questions) about your ICU
• A link to a short (<10 minutes) survey about the impact of COVID-19 on research in your ICU. It will be sent on the first of the month for the duration of the COVID-19 outbreak.
• A report summarizing the results after each monthly survey
Ethics and privacy: This study has been reviewed by the Hamilton Integrated Research Ethics Board. Participation is of course voluntary and submitting data implies your consent to participate . You can stop participating at any time and prior to analysis you can withdraw any data from your centre. We will not publish any site or personal identifying information without your express consent.
Thank you, and we welcome any suggestions for adapting and updating this survey as events in this pandemic unfold.
Mark Duffett, RPh PhD
Departments of Pediatrics and Health Research Methods, Evidence, and Impact, McMaster University, Hamilton, Canada. duffetmc@mcmaster.ca, @M_Duffett
Michelle Kho, PT PhD
School of Rehabilitation Science, McMaster University, Hamilton, Canada. khome@mcmaster.ca, @khome
LS0tCnRpdGxlOiAiSW1wYWN0IG9mIENPVklELTE5IG9uIGNyaXRpY2FsIGNhcmUgcmVzZWFyY2giCm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgICB0b2M6IHllcwogIGh0bWxfbm90ZWJvb2s6CiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKICAgIHRvYzogeWVzCiAgICB0b2NfZmxvYXQ6IHllcwogIHBkZl9kb2N1bWVudDoKICAgIHRvYzogeWVzCi0tLQoKCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQoKIyBsb2FkIHBhY2thZ2VzIChvdGhlciBwYWNrYWdlcyBsb2FkZWQgd2l0aCBzb3VyY2VkIGZpbGVzKQpsaWJyYXJ5KGtuaXRyKQoKIyAjIHNvdXJjZSBmaWxlcwojICMgc291cmNpbmcgbm90IHdvcmtpbmcuLi5wcm9ibGVtIHdpdGggd29ya2luZyBkaXJlY3RvcnkuIFNvIHJ1biBmaWxlcyBtYW51YWxseSBmb3Igbm93OiBSdW4gc291cmNpbmcgaW4gQ09WSUQtMTkgU3VydmV5IHJlcG9ydCAtIHNvdXJjaW5nIGZpbGVzLlIpCgojIHNldCBvcHRpb25zCm9wdHNfa25pdCRzZXQocm9vdC5kaXIgPSBycHJvanJvb3Q6OmZpbmRfcnN0dWRpb19yb290X2ZpbGUoKSkKb3B0c19jaHVuayRzZXQoZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgaW5jbHVkZT1UUlVFKQoKIyBsb2FkKCJ3b3Jrc3BhY2UuUkRhdGEiKQoKCiMgbGlicmFyeSh0aWR5dmVyc2UpCiMgbGlicmFyeShSQ29sb3JCcmV3ZXIpCiMgbGlicmFyeShzZikKIyBsaWJyYXJ5KHJuYXR1cmFsZWFydGgpCiMgbGlicmFyeShybmF0dXJhbGVhcnRoZGF0YSkKIyBsaWJyYXJ5KHJnZW9zKQojIGxpYnJhcnkodGlueXRleCkKIyBsaWJyYXJ5KGx1YnJpZGF0ZSkKYGBgCiAgClRoaXMgcmVwb3J0IHN1bW1hcml6ZXMgdGhlIHJlc3VsdHMgb2YgYW4gb25nb2luZyBzdHVkeSBmb2N1c2VkIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGltcGFjdCBvZiB0aGUgQ09WSUQtMTkgcGFuZGVtaWMgb24gQ3JpdGljYWwgQ2FyZSByZXNlYXJjaC4gSXQgaW5jbHVkZXMgZGF0YSBzdWJtaXR0ZWQgYnkgYHIgbnJvdyhkYXRfY2VudHJlKWAgY2VudHJlcyBiZXR3ZWVuIGByIG1pbihkYXRfZGF0ZSRyZXNlYXJjaF9pbXBhY3RfdGltZXN0YW1wLCBuYS5ybSA9IFRSVUUpIGAgYW5kIGByIG1heChkYXRfZGF0ZSRyZXNlYXJjaF9pbXBhY3RfdGltZXN0YW1wLCBuYS5ybSA9IFRSVUUpYC4gCgo8IS0tIFRhYnMgbm90IHdvcmtpbmcgLS0+CjwhLS1tYWtlcyB0YWJzIG91dCBvZiBzdWJoZWFkaW5ncy0tPiAgCjwhLS0gIyB7LnRhYnNldCAudGFic2V0LWZhZGUgLnRhYnNldC1waWxsc30gICAtLT4KCjwhLS10YWIgMS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+ICAKIyMgUGFydGljaXBhdGluZyBjZW50cmVzICAKKioqICAKIyMjIElDVSBsb2NhdGlvbgpgYGB7ciBmaWcuZnVsbHdpZHRoID0gVFJVRX0KbWFwX3dvcmxkCmBgYAoKYGBge3IgY291bnRyaWVzLCBlY2hvID0gRkFMU0V9CmRhdF9jZW50cmUgJT4lIAogIGNvdW50KENvdW50cnlfQ29kZV8zKSAlPiUgCiAgYXJyYW5nZShkZXNjKG4pKSAlPiUgCiAgc2VsZWN0KENvdW50cnkgPSBDb3VudHJ5X0NvZGVfMywgSUNVcyA9IG4pICU+JSAKICBrYWJsZSgpCmBgYAoKKioqICAKIyMjIElDVSBwb3B1bGF0aW9uICAKYGBge3J9CmRhdF9yZWRjYXAgJT4lIAogIHNlbGVjdChyZWNvcmRfaWQsIHNpdGVfcG9wKSAlPiUgCiAgZHJvcF9uYShzaXRlX3BvcCkgJT4lIAogIG11dGF0ZShzaXRlX3BvcCA9IHJlY29kZShzaXRlX3BvcCwgIjEiID0gIkFkdWx0IiwgIjIiID0gIlBlZGlhdHJpYyIsICIzIiA9ICJNaXhlZCIpKSAlPiUgCiAgICBjb3VudChzaXRlX3BvcCkgJT4lIAogIG11dGF0ZShwZXJjID0gbi5wZXIobiwgc3VtKG4pLCAwKSwKICAgICAgICAgbGFiZWwgPSBwYXN0ZShzaXRlX3BvcCwgIlxuIiwgcGVyYywgc2VwID0gIiIpCiAgICAgICAgICkgJT4lIAogIG11dGF0ZShvcmRlciA9IHJvd19udW1iZXIoKSwKICAgICAgICAgZnJhY3Rpb24gPSBuIC8gc3VtKG4pLAogICAgICAgICBsYWJlbF9wb3MgPSAoY3Vtc3VtKGZyYWN0aW9uKSArIGMoMCwgaGVhZChjdW1zdW0oZnJhY3Rpb24pLCBuID0gLTEpKSkgLyAyKSAlPiUgCmdncGxvdChhZXMoeCA9IDIsIHkgPSBmcmFjdGlvbiwgZmlsbCA9IGZjdF9yZW9yZGVyKGxhYmVsLCByZXYob3JkZXIpKSApKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiZmlsbCIsIHdpZHRoID0gMSkgKwogIGdlb21fdGV4dChhZXMobGFiZWwgPSBsYWJlbCwgeSA9IGxhYmVsX3BvcywgaGp1c3QgPSAib3V0d2FyZCIpLCAKICAgICAgICAgICAgbGluZWhlaWdodCA9IDAuOSwgeCA9IDIuNzUsIHNpemUgPSA0KSArCiAgY29vcmRfcG9sYXIoInkiLCBzdGFydCA9IDAsIGNsaXAgPSAib2ZmIikgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiUGFpcmVkIikrCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoMC4wNSwgMi41KSkrCiAgdGhlbWVfdm9pZCgpKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKCmBgYAoKKioqICAKIyMjIENlbnRyZSB0eXBlICAKYGBge3J9CmRhdF9yZWRjYXAgJT4lIAogIHNlbGVjdChyZWNvcmRfaWQsIHNpdGVfc2V0dGluZykgJT4lIAogIGRyb3BfbmEoc2l0ZV9zZXR0aW5nKSAlPiUgCiAgbXV0YXRlKHNpdGVfc2V0dGluZyA9IHJlY29kZShzaXRlX3NldHRpbmcsICIxIiA9ICJBY2FkZW1pYyIsICIyIiA9ICJDb21tdW5pdHkiKSkgJT4lIAogICAgY291bnQoc2l0ZV9zZXR0aW5nKSAlPiUgCiAgbXV0YXRlKHBlcmMgPSBuLnBlcihuLCBzdW0obiksIDApLAogICAgICAgICBsYWJlbCA9IHBhc3RlKHNpdGVfc2V0dGluZywgIlxuIiwgcGVyYywgc2VwID0gIiIpCiAgICAgICAgICkgJT4lIAogIG11dGF0ZShvcmRlciA9IHJvd19udW1iZXIoKSwKICAgICAgICAgZnJhY3Rpb24gPSBuIC8gc3VtKG4pLAogICAgICAgICBsYWJlbF9wb3MgPSAoY3Vtc3VtKGZyYWN0aW9uKSArIGMoMCwgaGVhZChjdW1zdW0oZnJhY3Rpb24pLCBuID0gLTEpKSkgLyAyKSAlPiUgCmdncGxvdChhZXMoeCA9IDIsIHkgPSBmcmFjdGlvbiwgZmlsbCA9IGZjdF9yZW9yZGVyKGxhYmVsLCByZXYob3JkZXIpKSApKSArCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiZmlsbCIsIHdpZHRoID0gMSkgKwogIGdlb21fdGV4dChhZXMobGFiZWwgPSBsYWJlbCwgeSA9IGxhYmVsX3BvcywgaGp1c3QgPSAib3V0d2FyZCIpLCAKICAgICAgICAgICAgbGluZWhlaWdodCA9IDAuOSwgeCA9IDIuNzUsIHNpemUgPSA0KSArCiAgY29vcmRfcG9sYXIoInkiLCBzdGFydCA9IDAsIGNsaXAgPSAib2ZmIikgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiQWNjZW50IikrCiAgc2NhbGVfeF9jb250aW51b3VzKGxpbWl0cyA9IGMoMC4wNSwgMi41KSkrCiAgdGhlbWVfdm9pZCgpKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIikKCmBgYAogCiAKKioqCiMjIyBTdXJ2ZXlzIHBlciBtb250aAoKYGBge3J9CmRhdF9yZWRjYXAgJT4lCiAgc2VsZWN0KHJlZGNhcF9ldmVudF9uYW1lKSAlPiUKICBmaWx0ZXIocmVkY2FwX2V2ZW50X25hbWUgIT0gImNlbnRyZV9pbmZvX2FybV8xIikgJT4lCiAgbXV0YXRlKE1vbnRoID0gY2FzZV93aGVuKAogICAgcmVkY2FwX2V2ZW50X25hbWUgPT0gIjIwMjAwM19hcm1fMSIgfiAiTWFyY2giLAogICAgcmVkY2FwX2V2ZW50X25hbWUgPT0gIjIwMjAwNF9hcm1fMSIgfiAiQXByaWwiLAogICAgcmVkY2FwX2V2ZW50X25hbWUgPT0gIjIwMjAwNV9hcm1fMSIgfiAiTWF5IiwKICAgIHJlZGNhcF9ldmVudF9uYW1lID09ICIyMDIwMDZfYXJtXzEiIH4gIkp1bmUiLAogICAgcmVkY2FwX2V2ZW50X25hbWUgPT0gIjIwMjAwN19hcm1fMSIgfiAiSnVseSIKICApKSAlPiUKICBtdXRhdGUoTW9udGggPSBmY3RfcmVsZXZlbChNb250aCwgYygiTWFyY2giLCAiQXByaWwiLCAiTWF5IiwgIkp1bmUiLCAiSnVseSIpKSkgJT4lCiAgZ3JvdXBfYnkoTW9udGgpICU+JQogIGRyb3BfbmEoKSAlPiUKICB0YWxseSgpICU+JQogIHNlbGVjdChNb250aCwgIkNvdW50IiA9IG4pICU+JQogIGthYmxlKCkKYGBgCiAgIAogICAgCmBgYHtyfQojIHdlZWtseV9kZW1vICU+JSAgCiMgICBrYWJsZSgpCmBgYAogIAo8IS0tdGFiIDMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiAgCioqKiAgCiMjIENPVklELTE5ICAKCioqKgoqKkFyZSB0aGVyZSBhbnkgcGF0aWVudHMgaW4geW91ciBob3NwaXRhbCB3aXRoIENPTkZJUk1FRCBDT1ZJRC0xOT8qKiAobiA9IGByIHN1bSghaXMubmEoZGF0X3JlZGNhcCRjb3ZpZF9ob3NwKSlgIHN1cnZleXMpCgpgYGB7ciBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD02LCByZXN1bHRzID0gImhvbGQifQpnZ3Bsb3QobW9udGhseV9jb3ZpZF9ob3NwKSArCiAgZ2VvbV9yZWN0KGFlcyh4bWluID0geG1pbiwgeG1heCA9IHhtYXgsIHltaW4gPSB5bWluLCB5bWF4ID0geW1heCwgZmlsbCA9IGNvdmlkX2hvc3ApLCAKICAgICAgICAgICAgY29sb3VyID0gIndoaXRlIiwgc2l6ZSA9IDEpICsKICBzY2FsZV9maWxsX3ZpcmlkaXNfZChuYW1lID0gIiIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpwZXJjZW50X2Zvcm1hdChhY2N1cmFjeSA9IDEpLCBleHBhbmQgPSBjKDAsIDApKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IG1vbnRobHlfY292aWRfaG9zcCR4Y2VudGVyLCBsYWJlbHMgPSBtb250aGx5X2NvdmlkX2hvc3AkbW9udGgsCiAgICAgICAgICAgICAgICAgICAgIGV4cGFuZCA9IGMoMCwgMCkpICsKICBjb29yZF9maXhlZCgpICsKICB0aGVtZV9idygpICsgCiAgdGhlbWVfbW9zYWljCmBgYAoKKioqCioqQXJlIHRoZXJlIGFueSBwYXRpZW50cyBpbiB5b3VyIElDVSB3aXRoIENPTkZJUk1FRCBDT1ZJRC0xOT8qKiAobiA9IGByIHN1bSghaXMubmEoZGF0X3JlZGNhcCRjb3ZpZF9ob3NwKSlgIHN1cnZleXMpCgpgYGB7ciBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD02LCByZXN1bHRzID0gImhvbGQifQpnZ3Bsb3QobW9udGhseV9jb3ZpZF9pY3UpICsKICBnZW9tX3JlY3QoYWVzKHhtaW4gPSB4bWluLCB4bWF4ID0geG1heCwgeW1pbiA9IHltaW4sIHltYXggPSB5bWF4LCBmaWxsID0gY292aWRfaWN1KSwgCiAgICAgICAgICAgIGNvbG91ciA9ICJ3aGl0ZSIsIHNpemUgPSAxKSArCiAgc2NhbGVfZmlsbF92aXJpZGlzX2QobmFtZSA9ICIiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6cGVyY2VudF9mb3JtYXQoYWNjdXJhY3kgPSAxKSwgZXhwYW5kID0gYygwLCAwKSkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBtb250aGx5X2NvdmlkX2ljdSR4Y2VudGVyLCBsYWJlbHMgPSBtb250aGx5X2NvdmlkX2ljdSRtb250aCwKICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLCAwKSkgKwogIGNvb3JkX2ZpeGVkKCkgKwogIHRoZW1lX2J3KCkgKyAKICB0aGVtZV9tb3NhaWMKYGBgCioqKgoqKklzIHlvdXIgSUNVIGN1cnJlbnRseSBlbnJvbGxpbmcgcGF0aWVudHMgaW4gYW55IENPVklELTE5IHNwZWNpZmljIHN0dWRpZXM/KiogKG4gPSBgciBzdW0oIWlzLm5hKGRhdF9yZWRjYXAkcmVzX2NvdmlkX2FueSkpYCBzdXJ2ZXlzKQoKYGBge3IgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9NiwgcmVzdWx0cyA9ICJob2xkIn0KZ2dwbG90KG1vbnRobHlfcmVzX2NvdmlkX2FueSkgKwogIGdlb21fcmVjdChhZXMoeG1pbiA9IHhtaW4sIHhtYXggPSB4bWF4LCB5bWluID0geW1pbiwgeW1heCA9IHltYXgsIGZpbGwgPSByZXNfY292aWRfYW55KSwgCiAgICAgICAgICAgIGNvbG91ciA9ICJ3aGl0ZSIsIHNpemUgPSAxKSArCiAgc2NhbGVfZmlsbF92aXJpZGlzX2QobmFtZSA9ICIiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6cGVyY2VudF9mb3JtYXQoYWNjdXJhY3kgPSAxKSwgZXhwYW5kID0gYygwLCAwKSkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBtb250aGx5X3Jlc19jb3ZpZF9hbnkkeGNlbnRlciwgbGFiZWxzID0gbW9udGhseV9yZXNfY292aWRfYW55JG1vbnRoLAogICAgICAgICAgICAgICAgICAgICBleHBhbmQgPSBjKDAsIDApKSArCiAgY29vcmRfZml4ZWQoKSArCiAgdGhlbWVfYncoKSArIAogIHRoZW1lX21vc2FpYwoKYGBgCgoqKioKKipXaGF0IHR5cGVzIG9mIENPVklELTE5IHNwZWNpZmljIHJlc2VhcmNoIHN0dWRpZXMgYXJlIGN1cnJlbnRseSBlbnJvbGxpbmcgcGF0aWVudHMgaW4geW91ciBJQ1U/KiogKG4gPSBgciBzdW0oIWlzLm5hKGRhdF9yZWRjYXAkY292aWRfcmViKSlgIHN1cnZleXMpIChRdWVzdGlvbiBhZGRlZCBhZnRlciBzdGFydCBvZiB0aGUgc3R1ZHkpIAoKYGBge3J9CmRhdF9yZWRjYXAgJT4lIAogIGZpbHRlcihyZWRjYXBfZXZlbnRfbmFtZSAlaW4lIGMoIjIwMjAwM19hcm1fMSIsICIyMDIwMDRfYXJtXzEiLCAiMjAyMDA1X2FybV8xIiwgIjIwMjAwNl9hcm1fMSIsICIyMDIwMDdfYXJtXzEiKSkgJT4lCiAgbXV0YXRlKE1vbnRoID0gcmVjb2RlKHJlZGNhcF9ldmVudF9uYW1lLCAKICAgICAgICAgICAgICAgICAgICAgICAgIjIwMjAwM19hcm1fMSIgPSAiTWFyY2ggMjAyMCIsIAogICAgICAgICAgICAgICAgICAgICAgICAiMjAyMDA0X2FybV8xIiA9ICJBcHJpbCAyMDIwIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICIyMDIwMDVfYXJtXzEiID0gIk1heSAyMDIwIiwKICAgICAgICAgICAgICAgICAgICAgICAgIjIwMjAwNl9hcm1fMSIgPSAiSnVuZSAyMDIwIiwKICAgICAgICAgICAgICAgICAgICAgICAgIjIwMjAwN19hcm1fMSIgPSAiSnVseSAyMDIwIiksCiAgICAgICAgIE1vbnRoID0gZmN0X2lub3JkZXIoTW9udGgpKSAlPiUKICBzZWxlY3QoTW9udGgsICJSYW5kb21pemVkIiA9IHJlc19jb3ZfdHlwZV9fXzEsICJOb24tcmFuZG9taXplZCIgPSByZXNfY292X3R5cGVfX18yICwgIk9ic2VydmF0aW9uYWwiID0gcmVzX2Nvdl90eXBlX19fMywgIk90aGVyIiA9IHJlc19jb3ZfdHlwZV9fXzQpICU+JQogIG11dGF0ZV9hdChjKCJSYW5kb21pemVkIiwgIk5vbi1yYW5kb21pemVkIiwgIk9ic2VydmF0aW9uYWwiLCAiT3RoZXIiKSwgYXMubnVtZXJpYykgJT4lCiAgZ3JvdXBfYnkoTW9udGgpICU+JQogIHN1bW1hcmlzZV9hdChjKCJSYW5kb21pemVkIiwgIk5vbi1yYW5kb21pemVkIiwgIk9ic2VydmF0aW9uYWwiLCAiT3RoZXIiKSxzdW0sIG5hLnJtPSBUUlVFKSU+JQogIGthYmxlKGFsaWduID0gImMiKQoKI1RoaXMgaXMgdGhlIGNvZGUgSSBoYXZlIHRyaWFsIGJ1dCBJIGFtIHN0dWNrIGhlcmUKI2RhdF9yZWRjYXAgJT4lIAogI2ZpbHRlcihyZWRjYXBfZXZlbnRfbmFtZSAhPSAiY2VudHJlX2luZm9fYXJtXzEiKSAlPiUKICAjbXV0YXRlKE1vbnRoID0gcmVjb2RlKHJlZGNhcF9ldmVudF9uYW1lLCAKICAgICAgICAgICAgICAgICAgICAgICAgIyIyMDIwMDNfYXJtXzEiID0gIk1hcmNoIDIwMjAiLCAKICAgICAgICAgICAgICAgICAgICAgICAgIyIyMDIwMDRfYXJtXzEiID0gIkFwcmlsIDIwMjAiLCAKICAgICAgICAgICAgICAgICAgICAgICAgIyIyMDIwMDVfYXJtXzEiID0gIk1heSAyMDIwIiwKICAgICAgICAgICAgICAgICAgICAgICAgIyIyMDIwMDZfYXJtXzEiID0gIkp1bmUgMjAyMCIpLAogICAgICAgICNNb250aCA9IGZjdF9pbm9yZGVyKE1vbnRoKSkgJT4lCiAgI3NlbGVjdChNb250aCwgcmVjb3JkX2lkLCAgIlJhbmRvbWl6ZWQiID0gcmVzX2Nvdl90eXBlX19fMSwgIk5vbi1yYW5kb21pemVkIiA9IHJlc19jb3ZfdHlwZV9fXzIgLCAiT2JzZXJ2YXRpb25hbCIgPSByZXNfY292X3R5cGVfX18zLCAiT3RoZXIiID0gcmVzX2Nvdl90eXBlX19fNCkgJT4lCiAgI211dGF0ZV9hdChjKCJSYW5kb21pemVkIiwgIk5vbi1yYW5kb21pemVkIiwgIk9ic2VydmF0aW9uYWwiLCAiT3RoZXIiKSwgYXMubnVtZXJpYykgJT4lCiAgI211dGF0ZSgiU2l0ZSBDb3VudCIgPSBjYXNlX3doZW4oCiAgICAjUmFuZG9taXplZCA9PSAxIHwgYE5vbi1yYW5kb21pemVkYCA9PSAxIHwgT2JzZXJ2YXRpb25hbCA9PSAxIHwgT3RoZXIgPT0gMSB+IDEsCiAgICAjVFJVRSB+IDAKICAjKSkgJT4lCiAgI2dyb3VwX2J5KE1vbnRoKSAlPiUKICAjc3VtbWFyaXNlX2F0KGMoIlJhbmRvbWl6ZWQiLCAiTm9uLXJhbmRvbWl6ZWQiLCAiT2JzZXJ2YXRpb25hbCIsICJPdGhlciIsICJTaXRlIENvdW50Iiksc3VtLCBuYS5ybT0gVFJVRSkKCgojQ29tbWVudHMKI2RhdF9yZWRjYXAgJT4lIAogICNzZWxlY3QoT3RoZXIgPSByZXNfY292X3R5cGVfb3RoZXIpICU+JSAKICAjZHJvcF9uYShPdGhlcikgJT4lIAogICNrYWJsZSgpCmBgYAoqKioKKipJcyB5b3VyIElDVSBjdXJyZW50bHkgcHJlcGFyaW5nIGZvciBhbnkgQ09WSUQtMTkgc3BlY2lmaWMgc3R1ZGllcz8qKiAoUXVlc3Rpb24gYWRkZWQgYWZ0ZXIgc3RhcnQgb2YgdGhlIHN0dWR5KQoKYGBge3IgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9NiwgcmVzdWx0cyA9ICJob2xkIiwgd2FybmluZz1GQUxTRX0KCmdncGxvdChtb250aGx5X3Jlc19jb3ZpZF9hbnlfcHJlcCkgKwogIGdlb21fcmVjdChhZXMoeG1pbiA9IHhtaW4sIHhtYXggPSB4bWF4LCB5bWluID0geW1pbiwgeW1heCA9IHltYXgsIGZpbGwgPSByZXNfY292aWRfYW55X3ByZXApLCAKICAgICAgICAgICAgY29sb3VyID0gIndoaXRlIiwgc2l6ZSA9IDEpICsKICBzY2FsZV9maWxsX3ZpcmlkaXNfZChuYW1lID0gIiIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpwZXJjZW50X2Zvcm1hdChhY2N1cmFjeSA9IDEpLCBleHBhbmQgPSBjKDAsIDApKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IG1vbnRobHlfcmVzX2NvdmlkX2FueV9wcmVwJHhjZW50ZXIsIGxhYmVscyA9IG1vbnRobHlfcmVzX2NvdmlkX2FueV9wcmVwJG1vbnRoLAogICAgICAgICAgICAgICAgICAgICBleHBhbmQgPSBjKDAsIDApKSArCiAgY29vcmRfZml4ZWQoKSArCiAgdGhlbWVfYncoKSArIAogIHRoZW1lX21vc2FpYwpgYGAKCgo8IS0tdGFiIDYtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiAgCiMjIEluc3RpdHV0aW9uYWwgcG9saWNpZXMgCgoqKioKKipJcyB5b3VyIFJFQi9JUkIgcHJpb3JpdGl6aW5nIGFwcHJvdmFsIG9yIHdpbGxpbmcgdG8gZXhwZWRpdGUgYXBwcm92YWwgb2YgQ09WSUQtMTkgcHJvdG9jb2xzPyoqIChuID0gYHIgc3VtKCFpcy5uYShkYXRfcmVkY2FwJGNvdmlkX3JlYikpYCBzdXJ2ZXlzKQoKYGBge3IgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9NiwgcmVzdWx0cyA9ICJob2xkIiwgd2FybmluZz1GQUxTRX0KZ2dwbG90KG1vbnRobHlfY292aWRfcmViKSArCiAgZ2VvbV9yZWN0KGFlcyh4bWluID0geG1pbiwgeG1heCA9IHhtYXgsIHltaW4gPSB5bWluLCB5bWF4ID0geW1heCwgZmlsbCA9IGNvdmlkX3JlYiksIAogICAgICAgICAgICBjb2xvdXIgPSAid2hpdGUiLCBzaXplID0gMikgKwogIHNjYWxlX2ZpbGxfbWFudWFsKG5hbWUgPSAiIiwgdmFsdWVzID0gYygiI0Y3OTc3QSIsICIjRkZGNzlBIiwgIiM4MkNBOUQiKSwgZ3VpZGUgPSBndWlkZV9sZWdlbmQocmV2ZXJzZSA9IEZBTFNFKSkrCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6cGVyY2VudF9mb3JtYXQoYWNjdXJhY3kgPSAxKSwgCiAgICAgICAgICAgICAgICAgICAgIGV4cGFuZCA9IGMoMCwgMCkpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gbW9udGhseV9jb3ZpZF9yZWIkeGNlbnQsIGxhYmVscyA9IG1vbnRobHlfY292aWRfcmViJG1vbnRoLAogICAgICAgICAgICAgICAgICAgICBleHBhbmQgPSBjKDAsIDApKSArCiAgY29vcmRfZml4ZWQoKSArCiAgdGhlbWVfYncoKSArIAogIHRoZW1lX21vc2FpYwpgYGAKCgoKKioqCjwhLS0gKipEb2VzIHlvdXIgaW5zdGl0dXRpb24gY3VycmVudGx5IHJlcXVpcmUgc3VzcGVuZGluZyBlbnJvbG1lbnQgaW4gSUNVIHN0dWRpZXM/KiogKG4gPSBgciBzdW0oIWlzLm5hKGRhdF9yZWRjYXAkcG9saWN5KSlgKSAoUXVlc3Rpb24gYWRkZWQgYWZ0ZXIgc3RhcnQgb2YgdGhlIHN0dWR5KSAtLT4KCmBgYHtyIGZpZy5oZWlnaHQ9MiwgZmlnLndpZHRoPTYsIHJlc3VsdHMgPSAiaG9sZCIsIHdhcm5pbmc9RkFMU0V9CgojICNyZXF1aXJlIHN1c3BlbmRpbmcgZW5yb2xtZW50IGluIGljdSBzdHVkaWVzCiMgZGF0X3JlZGNhcCAlPiUgCiMgICBmaWx0ZXIocmVkY2FwX2V2ZW50X25hbWUgJWluJSBjKCIyMDIwMDNfYXJtXzEiLCAiMjAyMDA0X2FybV8xIiwgIjIwMjAwNV9hcm1fMSIsICIyMDIwMDZfYXJtXzEiKSkgJT4lCiMgICBtdXRhdGUoTW9udGggPSByZWNvZGUocmVkY2FwX2V2ZW50X25hbWUsIAojICAgICAgICAgICAgICAgICAgICAgICAgICIyMDIwMDNfYXJtXzEiID0gIk1hcmNoIDIwMjAiLCAKIyAgICAgICAgICAgICAgICAgICAgICAgICAiMjAyMDA0X2FybV8xIiA9ICJBcHJpbCAyMDIwIiwgCiMgICAgICAgICAgICAgICAgICAgICAgICAgIjIwMjAwNV9hcm1fMSIgPSAiTWF5IDIwMjAiLAojICAgICAgICAgICAgICAgICAgICAgICAgICIyMDIwMDZfYXJtXzEiID0gIkp1bmUgMjAyMCIpLAojICAgICAgICAgIE1vbnRoID0gZmN0X2lub3JkZXIoTW9udGgpKSAlPiUKIyAgIHNlbGVjdChNb250aCwgIlllcyAtIEFsbCBzdHVkaWVzIiA9IHBvbGljeV9fXzEsICJZZXMgLSBBbGwgbm9uLUNPVklELTE5IHN0dWRpZXMiID0gcG9saWN5X19fMiAsICJZZXMgLSBTb21lIHN0dWRpZXMiID0gcG9saWN5X19fMywgIk5vIiA9IHBvbGljeV9fXzQsICJPdGhlciIgPSBwb2xpY3lfX181KSAlPiUKIyAgIG11dGF0ZV9hdChjKCJZZXMgLSBBbGwgc3R1ZGllcyIsICJZZXMgLSBBbGwgbm9uLUNPVklELTE5IHN0dWRpZXMiLCAiWWVzIC0gU29tZSBzdHVkaWVzIiwgIk90aGVyIiksIAojICAgICAgICAgICAgIGFzLm51bWVyaWMpICU+JQojICAgZ3JvdXBfYnkoTW9udGgpICU+JQojICAgc3VtbWFyaXNlX2F0KGMoIlllcyAtIEFsbCBzdHVkaWVzIiwgIlllcyAtIEFsbCBub24tQ09WSUQtMTkgc3R1ZGllcyIsICJZZXMgLSBTb21lIHN0dWRpZXMiLCAiT3RoZXIiKSxzdW0sIG5hLnJtPSBUUlVFKSAlPiUKIyAgIGthYmxlKGFsaWduID0gImMiKQoKI1RBQkxFIEZPUiBUSElTIFFVRVNUSU9OCgojVHlwZXMgb2YgU3R1ZGllcyB0aGF0IHdlcmUgYWZmZWN0ZWQ/CiNkYXRfcmVkY2FwICU+JSAKICAjc2VsZWN0KENvbW1lbnRzID0gcG9saWN5X3NvbWVfZXhwbGFpbikgJT4lIAogICNkcm9wX25hKENvbW1lbnRzKSAlPiUgCiAgI2thYmxlKCkKCiNQbGVhc2UgZXhwbGFpbiB0aGUgb3RoZXIgcmVxdWlyZW1lbnRzCiNkYXRfcmVkY2FwICU+JSAKICAjc2VsZWN0KENvbW1lbnRzID0gcG9saWN5X290aGVyKSAlPiUgCiAgI2Ryb3BfbmEoQ29tbWVudHMpICU+JSAKICAja2FibGUoKQoKYGBgCgoqKiogICAgIAo8IS0tdGFiIDQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPiAgCiMjIEltcGFjdCBvbiByZXNlYXJjaCAgCioqKgoKKipCZWNhdXNlIG9mIENPVklELTE5IG9yIHByZXBhcmF0aW9uIGZvciBpdCwgaGFzIHlvdXIgSUNVOioqICAKCioqU3VzcGVuZGVkIHJlY3J1aXRtZW50IGZvciBhbnkgc3R1ZGllcz8qKiAobiA9IGByIHN1bSghaXMubmEoZGF0X3JlZGNhcCRlZmZlY3Rfc3VzcGVuZCkpYCBzdXJ2ZXlzKQpgYGB7ciBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD02LCByZXN1bHRzID0gImhvbGQifQpnZ3Bsb3QobW9udGhseV9lZmZlY3Rfc3VzcGVuZCkgKwogIGdlb21fcmVjdChhZXMoeG1pbiA9IHhtaW4sIHhtYXggPSB4bWF4LCB5bWluID0geW1pbiwgeW1heCA9IHltYXgsIGZpbGwgPSBlZmZlY3Rfc3VzcGVuZCksIAogICAgICAgICAgICBjb2xvdXIgPSAid2hpdGUiLCBzaXplID0gMSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKG5hbWUgPSAiIiwgdmFsdWVzID0gYygiIzgyQ0E5RCIsICIjRkZGNzlBIiwgIiNGNzk3N0EiKSwgZ3VpZGUgPSBndWlkZV9sZWdlbmQocmV2ZXJzZSA9IEZBTFNFKSkrCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6cGVyY2VudF9mb3JtYXQoYWNjdXJhY3kgPSAxKSwgCiAgICAgICAgICAgICAgICAgICAgIGV4cGFuZCA9IGMoMCwgMCkpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gbW9udGhseV9lZmZlY3Rfc3VzcGVuZCR4Y2VudCwgbGFiZWxzID0gbW9udGhseV9lZmZlY3Rfc3VzcGVuZCRtb250aCwKICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLCAwKSkgKwogIGNvb3JkX2ZpeGVkKCkgKwogIHRoZW1lX2J3KCkgKyAKICB0aGVtZV9tb3NhaWMKCiNkYXRfcmVkY2FwICU+JSAKICAjc2VsZWN0KENvbW1lbnRzID0gZWZmZWN0X3N1c3BlbmRfZXhwbGFpbikgJT4lIAogICNkcm9wX25hKENvbW1lbnRzKSAlPiUgCiAgI2thYmxlKCkKCmBgYAoqKioKKipNb2RpZmllZCByZWNydWl0bWVudCBmb3IgY3VycmVudCBzdHVkaWVzPyoqIChuID0gYHIgc3VtKCFpcy5uYShkYXRfcmVkY2FwJGVmZmVjdF9tb2RpZnkpKWAgc3VydmV5cykKCmBgYHtyIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTYsIHJlc3VsdHMgPSAiaG9sZCJ9CmdncGxvdChtb250aGx5X2VmZmVjdF9tb2RpZnkpICsKICBnZW9tX3JlY3QoYWVzKHhtaW4gPSB4bWluLCB4bWF4ID0geG1heCwgeW1pbiA9IHltaW4sIHltYXggPSB5bWF4LCBmaWxsID0gZWZmZWN0X21vZGlmeSksIAogICAgICAgICAgICBjb2xvdXIgPSAid2hpdGUiLCBzaXplID0gMSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKG5hbWUgPSAiIiwgdmFsdWVzID0gYygiIzgyQ0E5RCIsICIjRkZGNzlBIiwgIiNGNzk3N0EiKSwgZ3VpZGUgPSBndWlkZV9sZWdlbmQocmV2ZXJzZSA9IEZBTFNFKSkrCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6cGVyY2VudF9mb3JtYXQoYWNjdXJhY3kgPSAxKSwgCiAgICAgICAgICAgICAgICAgICAgIGV4cGFuZCA9IGMoMCwgMCkpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gbW9udGhseV9lZmZlY3RfbW9kaWZ5JHhjZW50LCBsYWJlbHMgPSBtb250aGx5X2VmZmVjdF9tb2RpZnkkbW9udGgsCiAgICAgICAgICAgICAgICAgICAgIGV4cGFuZCA9IGMoMCwgMCkpICsKICBjb29yZF9maXhlZCgpICsKICB0aGVtZV9idygpICsgCiAgdGhlbWVfbW9zYWljCgoKI0NvbW1lbnRzCiNkYXRfcmVkY2FwICU+JSAKICAjc2VsZWN0KENvbW1lbnRzID0gZWZmZWN0X21vZGlmeV9leHBsYWluKSAlPiUgCiAgI2Ryb3BfbmEoQ29tbWVudHMpICU+JSAKICAja2FibGUoKQoKYGBgCioqKgoqKkRlbGF5ZWQgdGhlIGluaXRpYXRpb24gb2YgbmV3IChub24tQ09WSUQtMTkpIHN0dWRpZXM/KiogKG4gPSBgciBzdW0oIWlzLm5hKGRhdF9yZWRjYXAkZWZmZWN0X2RlbGF5KSlgIHN1cnZleXMpCgpgYGB7ciBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD02LCByZXN1bHRzID0gImhvbGQiLCB3YXJuaW5nPUZBTFNFfQpnZ3Bsb3QobW9udGhseV9lZmZlY3RfZGVsYXkpICsKICBnZW9tX3JlY3QoYWVzKHhtaW4gPSB4bWluLCB4bWF4ID0geG1heCwgeW1pbiA9IHltaW4sIHltYXggPSB5bWF4LCBmaWxsID0gZWZmZWN0X2RlbGF5KSwgCiAgICAgICAgICAgIGNvbG91ciA9ICJ3aGl0ZSIsIHNpemUgPSAxKSArCiAgc2NhbGVfZmlsbF9tYW51YWwobmFtZSA9ICIiLCB2YWx1ZXMgPSBjKCIjODJDQTlEIiwgIiNGRkY3OUEiLCAiI0Y3OTc3QSIpLCBndWlkZSA9IGd1aWRlX2xlZ2VuZChyZXZlcnNlID0gRkFMU0UpKSsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpwZXJjZW50X2Zvcm1hdChhY2N1cmFjeSA9IDEpLCAKICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLCAwKSkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBtb250aGx5X2VmZmVjdF9kZWxheSR4Y2VudCwgbGFiZWxzID0gbW9udGhseV9lZmZlY3RfZGVsYXkkbW9udGgsCiAgICAgICAgICAgICAgICAgICAgIGV4cGFuZCA9IGMoMCwgMCkpICsKICBjb29yZF9maXhlZCgpICsKICB0aGVtZV9idygpICsgCiAgdGhlbWVfbW9zYWljCgojQ29tbWVudHMKI2RhdF9yZWRjYXAgJT4lIAogICNzZWxlY3QoQ29tbWVudHMgPSBlZmZlY3RfZGVsYXlfZXhwbGFpbikgJT4lIAogICNkcm9wX25hKENvbW1lbnRzKSAlPiUgCiAgI2thYmxlKCkKCmBgYAoKKioqCioqRW5yb2xsZWQgTU9SRSBwYXRpZW50cyBpbiBzdHVkaWVzIGJlY2F1c2Ugb2YgaW5jcmVhc2VkIHBhdGllbnQgdm9sdW1lPyoqIChuID0gYHIgc3VtKCFpcy5uYShkYXRfcmVkY2FwJGVmZmVjdF9tb3JlKSlgIHN1cnZleXMpCgpgYGB7ciBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD02LCByZXN1bHRzID0gImhvbGQiLCB3YXJuaW5nPUZBTFNFfQpnZ3Bsb3QobW9udGhseV9lZmZlY3RfbW9yZSkgKwogIGdlb21fcmVjdChhZXMoeG1pbiA9IHhtaW4sIHhtYXggPSB4bWF4LCB5bWluID0geW1pbiwgeW1heCA9IHltYXgsIGZpbGwgPSBlZmZlY3RfbW9yZSksIAogICAgICAgICAgICBjb2xvdXIgPSAid2hpdGUiLCBzaXplID0gMSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKG5hbWUgPSAiIiwgdmFsdWVzID0gYygiIzgyQ0E5RCIsICIjRkZGNzlBIiwgIiNGNzk3N0EiKSwgZ3VpZGUgPSBndWlkZV9sZWdlbmQocmV2ZXJzZSA9IEZBTFNFKSkrCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6cGVyY2VudF9mb3JtYXQoYWNjdXJhY3kgPSAxKSwgCiAgICAgICAgICAgICAgICAgICAgIGV4cGFuZCA9IGMoMCwgMCkpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gbW9udGhseV9lZmZlY3RfbW9yZSR4Y2VudCwgbGFiZWxzID0gbW9udGhseV9lZmZlY3RfbW9yZSRtb250aCwKICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLCAwKSkgKwogIGNvb3JkX2ZpeGVkKCkgKwogIHRoZW1lX2J3KCkgKyAKICB0aGVtZV9tb3NhaWMKCiNDb21tZW50cyBBREQgVEhJUyBCQUNLIElOIElGIFRIRVJFIEFSRSBDT01NRU5UUwojZGF0X3JlZGNhcCAlPiUKICAjc2VsZWN0KENvbW1lbnRzID0gZWZmZWN0X21vcmVfZXhwbGFpbikgJT4lCiAgI2Ryb3BfbmEoQ29tbWVudHMpICU+JQogICNrYWJsZSgpCgpgYGAKCioqKgoqKkVucm9sbGVkIEZFV0VSIHBhdGllbnRzIGluIHN0dWRpZXMgYmVjYXVzZSBvZiBpbmNyZWFzZWQgcGF0aWVudCB2b2x1bWU/KiogKG4gPSBgciBzdW0oIWlzLm5hKGRhdF9yZWRjYXAkZWZmZWN0X2xlc3MpKWAgc3VydmV5cykKCmBgYHtyIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTYsIHJlc3VsdHMgPSAiaG9sZCJ9CmdncGxvdChtb250aGx5X2VmZmVjdF9sZXNzKSArCiAgZ2VvbV9yZWN0KGFlcyh4bWluID0geG1pbiwgeG1heCA9IHhtYXgsIHltaW4gPSB5bWluLCB5bWF4ID0geW1heCwgZmlsbCA9IGVmZmVjdF9sZXNzKSwgCiAgICAgICAgICAgIGNvbG91ciA9ICJ3aGl0ZSIsIHNpemUgPSAxKSArCiAgc2NhbGVfZmlsbF9tYW51YWwobmFtZSA9ICIiLCB2YWx1ZXMgPSBjKCIjODJDQTlEIiwgIiNGRkY3OUEiLCAiI0Y3OTc3QSIpLCBndWlkZSA9IGd1aWRlX2xlZ2VuZChyZXZlcnNlID0gRkFMU0UpKSsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpwZXJjZW50X2Zvcm1hdChhY2N1cmFjeSA9IDEpLCAKICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLCAwKSkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBtb250aGx5X2VmZmVjdF9sZXNzJHhjZW50LCBsYWJlbHMgPSBtb250aGx5X2VmZmVjdF9sZXNzJG1vbnRoLAogICAgICAgICAgICAgICAgICAgICBleHBhbmQgPSBjKDAsIDApKSArCiAgY29vcmRfZml4ZWQoKSArCiAgdGhlbWVfYncoKSArIAogIHRoZW1lX21vc2FpYwoKI0NvbW1lbnRzCiNkYXRfcmVkY2FwICU+JSAKICAjc2VsZWN0KENvbW1lbnRzID0gZWZmZWN0X2xlc3NfZXhwbGFpbikgJT4lIAogICNkcm9wX25hKENvbW1lbnRzKSAlPiUgCiAgI2thYmxlKCkKCmBgYAoKKioqCioqQ2hhbmdlZCB0aGUgYXBwcm9hY2ggdG8gY28tZW5yb2xsbWVudCBpbiBzdHVkaWVzPyoqIChuID0gYHIgc3VtKCFpcy5uYShkYXRfcmVkY2FwJGVmZmVjdF9jbykpYCBzdXJ2ZXlzKQkKCmBgYHtyIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTYsIHJlc3VsdHMgPSAiaG9sZCIsIHdhcm5pbmc9RkFMU0V9CmdncGxvdChtb250aGx5X2VmZmVjdF9jbykgKwogIGdlb21fcmVjdChhZXMoeG1pbiA9IHhtaW4sIHhtYXggPSB4bWF4LCB5bWluID0geW1pbiwgeW1heCA9IHltYXgsIGZpbGwgPSBlZmZlY3RfY28pLCAKICAgICAgICAgICAgY29sb3VyID0gIndoaXRlIiwgc2l6ZSA9IDEpICsKICBzY2FsZV9maWxsX21hbnVhbChuYW1lID0gIiIsIHZhbHVlcyA9IGMoIiM4MkNBOUQiLCAiI0ZGRjc5QSIsICIjRjc5NzdBIiksIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHJldmVyc2UgPSBGQUxTRSkpKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnRfZm9ybWF0KGFjY3VyYWN5ID0gMSksIAogICAgICAgICAgICAgICAgICAgICBleHBhbmQgPSBjKDAsIDApKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IG1vbnRobHlfZWZmZWN0X2NvJHhjZW50LCBsYWJlbHMgPSBtb250aGx5X2VmZmVjdF9jbyRtb250aCwKICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLCAwKSkgKwogIGNvb3JkX2ZpeGVkKCkgKwogIHRoZW1lX2J3KCkgKyAKICB0aGVtZV9tb3NhaWMKCiNDb21tZW50cwojZGF0X3JlZGNhcCAlPiUgCiAgI3NlbGVjdChDb21tZW50cyA9IGVmZmVjdF9jb19leHBsYWluKSAlPiUgCiAgI2Ryb3BfbmEoQ29tbWVudHMpICU+JSAKICAja2FibGUoKQoKYGBgCgoqKioKKipDaGFuZ2VkIG9yIHN0b3BwZWQgY29sbGVjdGlvbiBvZiBiaW9sb2dpYyBzYW1wbGVzPyoqIChuID0gYHIgc3VtKCFpcy5uYShkYXRfcmVkY2FwJGVmZmVjdF9iaW8pKWAgc3VydmV5cykKCmBgYHtyIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTYsIHJlc3VsdHMgPSAiaG9sZCJ9CmdncGxvdChtb250aGx5X2VmZmVjdF9iaW8pICsKICBnZW9tX3JlY3QoYWVzKHhtaW4gPSB4bWluLCB4bWF4ID0geG1heCwgeW1pbiA9IHltaW4sIHltYXggPSB5bWF4LCBmaWxsID0gZWZmZWN0X2JpbyksIAogICAgICAgICAgICBjb2xvdXIgPSAid2hpdGUiLCBzaXplID0gMSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKG5hbWUgPSAiIiwgdmFsdWVzID0gYygiIzgyQ0E5RCIsICIjRkZGNzlBIiwgIiNGNzk3N0EiKSwgZ3VpZGUgPSBndWlkZV9sZWdlbmQocmV2ZXJzZSA9IEZBTFNFKSkrCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6cGVyY2VudF9mb3JtYXQoYWNjdXJhY3kgPSAxKSwgCiAgICAgICAgICAgICAgICAgICAgIGV4cGFuZCA9IGMoMCwgMCkpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gbW9udGhseV9lZmZlY3RfYmlvJHhjZW50LCBsYWJlbHMgPSBtb250aGx5X2VmZmVjdF9iaW8kbW9udGgsCiAgICAgICAgICAgICAgICAgICAgIGV4cGFuZCA9IGMoMCwgMCkpICsKICBjb29yZF9maXhlZCgpICsKICB0aGVtZV9idygpICsgCiAgdGhlbWVfbW9zYWljCgojQ29tbWVudHMKI2RhdF9yZWRjYXAgJT4lIAogICNzZWxlY3QoQ29tbWVudHMgPSBlZmZlY3RfYmlvX2V4cGxhaW4pICU+JSAKICAjZHJvcF9uYShDb21tZW50cykgJT4lIAogICNrYWJsZSgpCgpgYGAKCioqKgoqKk90aGVyIGVmZmVjdHMgb24gc3R1ZGllcyBpbiB5b3VyIElDVT8qKiAobiA9IGByIHN1bSghaXMubmEoZGF0X3JlZGNhcCRlZmZlY3Rfb3RoZXJfeW4pKWAgc3VydmV5cykKCmBgYHtyIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTYsIHJlc3VsdHMgPSAiaG9sZCIsIHdhcm5pbmc9RkFMU0V9CmdncGxvdChtb250aGx5X2VmZmVjdF9vdGhlcl95bikgKwogIGdlb21fcmVjdChhZXMoeG1pbiA9IHhtaW4sIHhtYXggPSB4bWF4LCB5bWluID0geW1pbiwgeW1heCA9IHltYXgsIGZpbGwgPSBlZmZlY3Rfb3RoZXJfeW4pLCAKICAgICAgICAgICAgY29sb3VyID0gIndoaXRlIiwgc2l6ZSA9IDEpICsKICBzY2FsZV9maWxsX21hbnVhbChuYW1lID0gIiIsIHZhbHVlcyA9IGMoIiM4MkNBOUQiLCAiI0ZGRjc5QSIsICIjRjc5NzdBIiksIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHJldmVyc2UgPSBGQUxTRSkpKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnRfZm9ybWF0KGFjY3VyYWN5ID0gMSksIAogICAgICAgICAgICAgICAgICAgICBleHBhbmQgPSBjKDAsIDApKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IG1vbnRobHlfZWZmZWN0X290aGVyX3luJHhjZW50LCBsYWJlbHMgPSBtb250aGx5X2VmZmVjdF9vdGhlcl95biRtb250aCwKICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLCAwKSkgKwogIGNvb3JkX2ZpeGVkKCkgKwogIHRoZW1lX2J3KCkgKyAKICB0aGVtZV9tb3NhaWMKI0NvbW1lbnRzCiNkYXRfcmVkY2FwICU+JSAKICAjc2VsZWN0KENvbW1lbnRzID0gZWZmZWN0X290aGVyKSAlPiUgCiAgI2Ryb3BfbmEoQ29tbWVudHMpICU+JSAKICAja2FibGUoKQoKYGBgCiAgCiAKPCEtLXRhYiA1LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gIAoqKiogIAojIyBSZWFzb25zIGZvciBpbXBhY3QgICAgCgoqKioKKipCZWNhdXNlIG9mIENPVklELTE5IG9yIHByZXBhcmF0aW9uIGZvciBpdCwgaG93IG11Y2ggb2YgYW4gZWZmZWN0IGhhdmUgdGhlIGZvbGxvd2luZyBoYWQgb24gcmVzZWFyY2ggaW4geW91ciBJQ1U/KioKCioqUmVzZWFyY2ggc3RhZmYgV0lUSCBhIGNsaW5pY2FsIGJhY2tncm91bmQgYXJlIG5lZWRlZCB0byB3b3JrIGNsaW5pY2FsbHkqKiAobiA9IGByIHN1bSghaXMubmEoZGF0X3JlZGNhcCRyZWFzb25fY2xpbndvcmspKWAgc3VydmV5cykKCmBgYHtyIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTYuNSwgcmVzdWx0cyA9ICJob2xkIiwgd2FybmluZz1GQUxTRX0KCmdncGxvdChtb250aGx5X3JlYXNvbl9jbGlud29yaykgKwogIGdlb21fcmVjdChhZXMoeG1pbiA9IHhtaW4sIHhtYXggPSB4bWF4LCB5bWluID0geW1pbiwgeW1heCA9IHltYXgsIGZpbGwgPSByZWFzb25fY2xpbndvcmspLCAKICAgICAgICAgICAgY29sb3VyID0gIndoaXRlIiwgc2l6ZSA9IDEpICsKICBzY2FsZV9maWxsX2JyZXdlcihuYW1lID0gIiIsIHBhbGV0dGUgPSAiQmx1ZXMiLCBndWlkZSA9IGd1aWRlX2xlZ2VuZChyZXZlcnNlID0gVFJVRSksIAogICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IC0xKSsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpwZXJjZW50X2Zvcm1hdChhY2N1cmFjeSA9IDEpLCAKICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLCAwKSkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBtb250aGx5X3JlYXNvbl9jbGlud29yayR4Y2VudCwgbGFiZWxzID0gbW9udGhseV9yZWFzb25fY2xpbndvcmskbW9udGgsCiAgICAgICAgICAgICAgICAgICAgIGV4cGFuZCA9IGMoMCwgMCkpICsKICBjb29yZF9maXhlZCgpICsKICB0aGVtZV9idygpICsgCiAgdGhlbWVfbW9zYWljCmBgYAoKKioqCioqUmVzZWFyY2ggc3RhZmYgV0lUSE9VVCBhIGNsaW5pY2FsIGJhY2tncm91bmQgYXJlIG5lZWRlZCB0byBoZWxwIHdpdGggaG9zcGl0YWwgYWN0aXZpdGllcyoqIChuID0gYHIgc3VtKCFpcy5uYShkYXRfcmVkY2FwJHJlYXNvbl93b3JrKSlgIHN1cnZleXMpICAKYGBge3IgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9Ni41LCByZXN1bHRzID0gImhvbGQiLCB3YXJuaW5nPUZBTFNFfQoKZ2dwbG90KG1vbnRobHlfcmVhc29uX3dvcmspICsKICBnZW9tX3JlY3QoYWVzKHhtaW4gPSB4bWluLCB4bWF4ID0geG1heCwgeW1pbiA9IHltaW4sIHltYXggPSB5bWF4LCBmaWxsID0gcmVhc29uX3dvcmspLCAKICAgICAgICAgICAgY29sb3VyID0gIndoaXRlIiwgc2l6ZSA9IDEpICsKICBzY2FsZV9maWxsX2JyZXdlcihuYW1lID0gIiIsIHBhbGV0dGUgPSAiQmx1ZXMiLCBndWlkZSA9IGd1aWRlX2xlZ2VuZChyZXZlcnNlID0gVFJVRSksIAogICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IC0xKSsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpwZXJjZW50X2Zvcm1hdChhY2N1cmFjeSA9IDEpLCAKICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLCAwKSkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBtb250aGx5X3JlYXNvbl93b3JrJHhjZW50LCBsYWJlbHMgPSBtb250aGx5X3JlYXNvbl93b3JrJG1vbnRoLAogICAgICAgICAgICAgICAgICAgICBleHBhbmQgPSBjKDAsIDApKSArCiAgY29vcmRfZml4ZWQoKSArCiAgdGhlbWVfYncoKSArIAogIHRoZW1lX21vc2FpYwoKYGBgCioqKgoqKkludmVzdGlnYXRvcnMgYXJlIG5lZWRlZCB0byB3b3JrIGNsaW5pY2FsbHkqKiAobiA9IGByIHN1bSghaXMubmEoZGF0X3JlZGNhcCRyZWFzb25fY2xpbndvcmtfaW52ZXN0KSlgIHN1cnZleXMpIChRdWVzdGlvbiBhZGRlZCBhZnRlciBzdGFydCBvZiB0aGUgc3R1ZHkpCgpgYGB7ciBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD02LjUsIHJlc3VsdHMgPSAiaG9sZCIsIHdhcm5pbmc9RkFMU0V9CgpnZ3Bsb3QobW9udGhseV9yZWFzb25fY2xpbndvcmtfaW52ZXN0KSArCiAgZ2VvbV9yZWN0KGFlcyh4bWluID0geG1pbiwgeG1heCA9IHhtYXgsIHltaW4gPSB5bWluLCB5bWF4ID0geW1heCwgZmlsbCA9IHJlYXNvbl9jbGlud29ya19pbnZlc3QpLCAKICAgICAgICAgICAgY29sb3VyID0gIndoaXRlIiwgc2l6ZSA9IDEpICsKICBzY2FsZV9maWxsX2JyZXdlcihuYW1lID0gIiIsIHBhbGV0dGUgPSAiQmx1ZXMiLCBndWlkZSA9IGd1aWRlX2xlZ2VuZChyZXZlcnNlID0gVFJVRSksIAogICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IC0xKSsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpwZXJjZW50X2Zvcm1hdChhY2N1cmFjeSA9IDEpLCAKICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLCAwKSkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBtb250aGx5X3JlYXNvbl9jbGlud29ya19pbnZlc3QkeGNlbnQsIGxhYmVscyA9IG1vbnRobHlfcmVhc29uX2NsaW53b3JrX2ludmVzdCRtb250aCwKICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLCAwKSkgKwogIGNvb3JkX2ZpeGVkKCkgKwogIHRoZW1lX2J3KCkgKyAKICB0aGVtZV9tb3NhaWMKCmBgYAoKKioqCioqUmVzZWFyY2ggc3RhZmYgYXJlIGNvbmNlcm5lZCBhYm91dCB0aGVpciBzYWZldHkgd29ya2luZyBkdXJpbmcgb3V0YnJlYWsqKiAobiA9IGByIHN1bSghaXMubmEoZGF0X3JlZGNhcCRyZWFzb25fc2FmZXR5KSlgIHN1cnZleXMpCgpgYGB7ciBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD02LjUsIHJlc3VsdHMgPSAiaG9sZCJ9CmdncGxvdChtb250aGx5X3JlYXNvbl9zYWZldHkpICsKICBnZW9tX3JlY3QoYWVzKHhtaW4gPSB4bWluLCB4bWF4ID0geG1heCwgeW1pbiA9IHltaW4sIHltYXggPSB5bWF4LCBmaWxsID0gcmVhc29uX3NhZmV0eSksIAogICAgICAgICAgICBjb2xvdXIgPSAid2hpdGUiLCBzaXplID0gMSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKG5hbWUgPSAiIiwgcGFsZXR0ZSA9ICJCbHVlcyIsIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHJldmVyc2UgPSBUUlVFKSwgCiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gLTEpKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnRfZm9ybWF0KGFjY3VyYWN5ID0gMSksIAogICAgICAgICAgICAgICAgICAgICBleHBhbmQgPSBjKDAsIDApKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IG1vbnRobHlfcmVhc29uX3NhZmV0eSR4Y2VudCwgbGFiZWxzID0gbW9udGhseV9yZWFzb25fc2FmZXR5JG1vbnRoLAogICAgICAgICAgICAgICAgICAgICBleHBhbmQgPSBjKDAsIDApKSArCiAgY29vcmRfZml4ZWQoKSArCiAgdGhlbWVfYncoKSArIAogIHRoZW1lX21vc2FpYwoKYGBgCioqKgoqKllvdXIgcGVkaWF0cmljIElDVSBpcyBhZG1pdHRpbmcgKG9yIHBsYW5uaW5nIHRvIGFkbWl0KSBhZHVsdHMqKiAobiA9IGByIHN1bSghaXMubmEoZGF0X3JlZGNhcCRyZWFzb25fYWR1bHRzKSlgIHN1cnZleXMpIChRdWVzdGlvbiBhZGRlZCBhZnRlciBzdGFydCBvZiB0aGUgc3R1ZHkpCgpgYGB7ciBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD02LjUsIHJlc3VsdHMgPSAiaG9sZCJ9CgpnZ3Bsb3QobW9udGhseV9yZWFzb25fYWR1bHRzKSArCiAgZ2VvbV9yZWN0KGFlcyh4bWluID0geG1pbiwgeG1heCA9IHhtYXgsIHltaW4gPSB5bWluLCB5bWF4ID0geW1heCwgZmlsbCA9IHJlYXNvbl9hZHVsdHMpLCAKICAgICAgICAgICAgY29sb3VyID0gIndoaXRlIiwgc2l6ZSA9IDEpICsKICBzY2FsZV9maWxsX2JyZXdlcihuYW1lID0gIiIsIHBhbGV0dGUgPSAiQmx1ZXMiLCBndWlkZSA9IGd1aWRlX2xlZ2VuZChyZXZlcnNlID0gVFJVRSksIAogICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IC0xKSsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpwZXJjZW50X2Zvcm1hdChhY2N1cmFjeSA9IDEpLCAKICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLCAwKSkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBtb250aGx5X3JlYXNvbl9hZHVsdHMkeGNlbnQsIGxhYmVscyA9IG1vbnRobHlfcmVhc29uX2FkdWx0cyRtb250aCwKICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLCAwKSkgKwogIGNvb3JkX2ZpeGVkKCkgKwogIHRoZW1lX2J3KCkgKyAKICB0aGVtZV9tb3NhaWMKCmBgYAoKKioqCioqTm90IGVub3VnaCByZXNlYXJjaCBzdGFmZiBmb3IgaW5jcmVhc2VkIG51bWJlciBvZiBDT1ZJRC0xOSBzdHVkaWVzKiogKG4gPSBgciBzdW0oIWlzLm5hKGRhdF9yZWRjYXAkcmVhc29uX251bXN0dWRpZXMpKWAgc3VydmV5cykKCmBgYHtyIGZpZy5oZWlnaHQ9NiwgZmlnLndpZHRoPTYuNSwgcmVzdWx0cyA9ICJob2xkIiwgd2FybmluZz1GQUxTRX0KZ2dwbG90KG1vbnRobHlfcmVhc29uX251bXN0dWRpZXMpICsKICBnZW9tX3JlY3QoYWVzKHhtaW4gPSB4bWluLCB4bWF4ID0geG1heCwgeW1pbiA9IHltaW4sIHltYXggPSB5bWF4LCBmaWxsID0gcmVhc29uX251bXN0dWRpZXMpLCAKICAgICAgICAgICAgY29sb3VyID0gIndoaXRlIiwgc2l6ZSA9IDEpICsKICBzY2FsZV9maWxsX2JyZXdlcihuYW1lID0gIiIsIHBhbGV0dGUgPSAiQmx1ZXMiLCBndWlkZSA9IGd1aWRlX2xlZ2VuZChyZXZlcnNlID0gVFJVRSksIAogICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IC0xKSsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpwZXJjZW50X2Zvcm1hdChhY2N1cmFjeSA9IDEpLCAKICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLCAwKSkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBtb250aGx5X3JlYXNvbl9udW1zdHVkaWVzJHhjZW50LCBsYWJlbHMgPSBtb250aGx5X3JlYXNvbl9udW1zdHVkaWVzJG1vbnRoLAogICAgICAgICAgICAgICAgICAgICBleHBhbmQgPSBjKDAsIDApKSArCiAgY29vcmRfZml4ZWQoKSArCiAgdGhlbWVfYncoKSArIAogIHRoZW1lX21vc2FpYwpgYGAKCioqKgoqKk5vdCBlbm91Z2ggcmVzZWFyY2ggc3RhZmYgZm9yIGluY3JlYXNlZCBudW1iZXIgb2YgZWxpZ2libGUgcGF0aWVudHMqKiAobiA9IGByIHN1bSghaXMubmEoZGF0X3JlZGNhcCRyZWFzb25fbnVtcHRzKSlgIHN1cnZleXMpCgpgYGB7ciBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD02LjUsIHJlc3VsdHMgPSAiaG9sZCIsIHdhcm5pbmc9RkFMU0V9CmdncGxvdChtb250aGx5X3JlYXNvbl9udW1wdHMpICsKICBnZW9tX3JlY3QoYWVzKHhtaW4gPSB4bWluLCB4bWF4ID0geG1heCwgeW1pbiA9IHltaW4sIHltYXggPSB5bWF4LCBmaWxsID0gcmVhc29uX251bXB0cyksIAogICAgICAgICAgICBjb2xvdXIgPSAid2hpdGUiLCBzaXplID0gMSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKG5hbWUgPSAiIiwgcGFsZXR0ZSA9ICJCbHVlcyIsIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHJldmVyc2UgPSBUUlVFKSwgCiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gLTEpKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnRfZm9ybWF0KGFjY3VyYWN5ID0gMSksIAogICAgICAgICAgICAgICAgICAgICBleHBhbmQgPSBjKDAsIDApKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IG1vbnRobHlfcmVhc29uX251bXB0cyR4Y2VudCwgbGFiZWxzID0gbW9udGhseV9yZWFzb25fbnVtcHRzJG1vbnRoLAogICAgICAgICAgICAgICAgICAgICBleHBhbmQgPSBjKDAsIDApKSArCiAgY29vcmRfZml4ZWQoKSArCiAgdGhlbWVfYncoKSArIAogIHRoZW1lX21vc2FpYwpgYGAKCioqKgoqKkluZmVjdGlvbiBjb250cm9sIHBvbGljaWVzIGxpbWl0aW5nIHJlc2VhcmNoIHN0YWZmIGFjY2VzcyB0byB0aGUgSUNVKiogKG4gPSBgciBzdW0oIWlzLm5hKGRhdF9yZWRjYXAkcmVhc29uX2FjY2Vzc2ljdSkpYCBzdXJ2ZXlzKQoKYGBge3IgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9Ni41LCByZXN1bHRzID0gImhvbGQifQpnZ3Bsb3QobW9udGhseV9yZWFzb25fYWNjZXNzaWN1KSArCiAgZ2VvbV9yZWN0KGFlcyh4bWluID0geG1pbiwgeG1heCA9IHhtYXgsIHltaW4gPSB5bWluLCB5bWF4ID0geW1heCwgZmlsbCA9IHJlYXNvbl9hY2Nlc3NpY3UpLCAKICAgICAgICAgICAgY29sb3VyID0gIndoaXRlIiwgc2l6ZSA9IDEpICsKICBzY2FsZV9maWxsX2JyZXdlcihuYW1lID0gIiIsIHBhbGV0dGUgPSAiQmx1ZXMiLCBndWlkZSA9IGd1aWRlX2xlZ2VuZChyZXZlcnNlID0gVFJVRSksIAogICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IC0xKSsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpwZXJjZW50X2Zvcm1hdChhY2N1cmFjeSA9IDEpLCAKICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLCAwKSkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBtb250aGx5X3JlYXNvbl9hY2Nlc3NpY3UkeGNlbnQsIGxhYmVscyA9IG1vbnRobHlfcmVhc29uX2FjY2Vzc2ljdSRtb250aCwKICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLCAwKSkgKwogIGNvb3JkX2ZpeGVkKCkgKwogIHRoZW1lX2J3KCkgKyAKICB0aGVtZV9tb3NhaWMKYGBgCgoqKioKKipJbmZlY3Rpb24gY29udHJvbCBwb2xpY2llcyBsaW1pdGluZyByZXNlYXJjaCBzdGFmZiBhY2Nlc3MgdG8gcGF0aWVudHMgd2l0aCBjb25maXJtZWQgb3Igc3VzcGVjdGVkIENPVklELTE5KiogKG4gPSBgciBzdW0oIWlzLm5hKGRhdF9yZWRjYXAkcmVhc29uX2FjY2Vzc3B0KSlgIHN1cnZleXMpCgpgYGB7ciBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD02LjUsIHJlc3VsdHMgPSAiaG9sZCJ9CmdncGxvdChtb250aGx5X3JlYXNvbl9hY2Nlc3NwdCkgKwogIGdlb21fcmVjdChhZXMoeG1pbiA9IHhtaW4sIHhtYXggPSB4bWF4LCB5bWluID0geW1pbiwgeW1heCA9IHltYXgsIGZpbGwgPSByZWFzb25fYWNjZXNzcHQpLCAKICAgICAgICAgICAgY29sb3VyID0gIndoaXRlIiwgc2l6ZSA9IDEpICsKICBzY2FsZV9maWxsX2JyZXdlcihuYW1lID0gIiIsIHBhbGV0dGUgPSAiQmx1ZXMiLCBndWlkZSA9IGd1aWRlX2xlZ2VuZChyZXZlcnNlID0gVFJVRSksIAogICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IC0xKSsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpwZXJjZW50X2Zvcm1hdChhY2N1cmFjeSA9IDEpLCAKICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLCAwKSkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBtb250aGx5X3JlYXNvbl9hY2Nlc3NwdCR4Y2VudCwgbGFiZWxzID0gbW9udGhseV9yZWFzb25fYWNjZXNzcHQkbW9udGgsCiAgICAgICAgICAgICAgICAgICAgIGV4cGFuZCA9IGMoMCwgMCkpICsKICBjb29yZF9maXhlZCgpICsKICB0aGVtZV9idygpICsgCiAgdGhlbWVfbW9zYWljCmBgYAoKKioqCioqQ2xpbmljYWwgc3RhZmYgYXJlIHRvbyBidXN5IHRvIGNvbXBsZXRlIHJlc2VhcmNoLXJlbGF0ZWQgdGFza3MqKiAobiA9IGByIHN1bSghaXMubmEoZGF0X3JlZGNhcCRyZWFzb25fY2xpbndvcmtsb2FkKSlgIHN1cnZleXMpCgpgYGB7ciBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD02LjUsIHJlc3VsdHMgPSAiaG9sZCJ9CmdncGxvdChtb250aGx5X3JlYXNvbl9jbGlud29ya2xvYWQpICsKICBnZW9tX3JlY3QoYWVzKHhtaW4gPSB4bWluLCB4bWF4ID0geG1heCwgeW1pbiA9IHltaW4sIHltYXggPSB5bWF4LCBmaWxsID0gcmVhc29uX2NsaW53b3JrbG9hZCksIAogICAgICAgICAgICBjb2xvdXIgPSAid2hpdGUiLCBzaXplID0gMSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKG5hbWUgPSAiIiwgcGFsZXR0ZSA9ICJCbHVlcyIsIGd1aWRlID0gZ3VpZGVfbGVnZW5kKHJldmVyc2UgPSBUUlVFKSwgCiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gLTEpKwogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnRfZm9ybWF0KGFjY3VyYWN5ID0gMSksIAogICAgICAgICAgICAgICAgICAgICBleHBhbmQgPSBjKDAsIDApKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IG1vbnRobHlfcmVhc29uX2NsaW53b3JrbG9hZCR4Y2VudCwgbGFiZWxzID0gbW9udGhseV9yZWFzb25fY2xpbndvcmtsb2FkJG1vbnRoLAogICAgICAgICAgICAgICAgICAgICBleHBhbmQgPSBjKDAsIDApKSArCiAgY29vcmRfZml4ZWQoKSArCiAgdGhlbWVfYncoKSArIAogIHRoZW1lX21vc2FpYwpgYGAKCioqKgoqKlJlc2VhcmNoIGZhY2lsaXRpZXMgZm9yIHByb2Nlc3Npbmcgb3Igc3RvcmFnZSBvZiBiaW9sb2dpY2FsIHNhbXBsZXMgYXJlIGNsb3NlZCBvciBoYXZlIHJlZHVjZWQgY2FwYWNpdHkqKiAobiA9IGByIHN1bSghaXMubmEoZGF0X3JlZGNhcCRyZWFzb25fbGFiKSlgIHN1cnZleXMpIChRdWVzdGlvbiBhZGRlZCBhZnRlciBzdGFydCBvZiB0aGUgc3R1ZHkpCgpgYGB7ciBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD02LjUsIHJlc3VsdHMgPSAiaG9sZCJ9CgpnZ3Bsb3QobW9udGhseV9yZWFzb25fbGFiKSArCiAgZ2VvbV9yZWN0KGFlcyh4bWluID0geG1pbiwgeG1heCA9IHhtYXgsIHltaW4gPSB5bWluLCB5bWF4ID0geW1heCwgZmlsbCA9IHJlYXNvbl9sYWIpLCAKICAgICAgICAgICAgY29sb3VyID0gIndoaXRlIiwgc2l6ZSA9IDEpICsKICBzY2FsZV9maWxsX2JyZXdlcihuYW1lID0gIiIsIHBhbGV0dGUgPSAiQmx1ZXMiLCBndWlkZSA9IGd1aWRlX2xlZ2VuZChyZXZlcnNlID0gVFJVRSksIAogICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IC0xKSsKICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpwZXJjZW50X2Zvcm1hdChhY2N1cmFjeSA9IDEpLCAKICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLCAwKSkgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBtb250aGx5X3JlYXNvbl9sYWIkeGNlbnQsIGxhYmVscyA9IG1vbnRobHlfcmVhc29uX2xhYiRtb250aCwKICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLCAwKSkgKwogIGNvb3JkX2ZpeGVkKCkgKwogIHRoZW1lX2J3KCkgKyAKICB0aGVtZV9tb3NhaWMKCmBgYAoKKioqCioqQ09WSUQtMTkgc3BlY2lmaWMgcmVzZWFyY2ggaXMgcHJpb3JpdGl6ZWQgb3ZlciBvdGhlciByZXNlYXJjaCoqIChuID0gYHIgc3VtKCFpcy5uYShkYXRfcmVkY2FwJHJlYXNvbl9wcmlvcml0aWVzKSlgIHN1cnZleXMpCgpgYGB7ciBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD02LjUsIHJlc3VsdHMgPSAiaG9sZCIsIHdhcm5pbmc9RkFMU0V9CmdncGxvdChtb250aGx5X3JlYXNvbl9wcmlvcml0aWVzKSArCiAgZ2VvbV9yZWN0KGFlcyh4bWluID0geG1pbiwgeG1heCA9IHhtYXgsIHltaW4gPSB5bWluLCB5bWF4ID0geW1heCwgZmlsbCA9IHJlYXNvbl9wcmlvcml0aWVzKSwgCiAgICAgICAgICAgIGNvbG91ciA9ICJ3aGl0ZSIsIHNpemUgPSAxKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIobmFtZSA9ICIiLCBwYWxldHRlID0gIkJsdWVzIiwgZ3VpZGUgPSBndWlkZV9sZWdlbmQocmV2ZXJzZSA9IFRSVUUpLCAKICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAtMSkrCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6cGVyY2VudF9mb3JtYXQoYWNjdXJhY3kgPSAxKSwgCiAgICAgICAgICAgICAgICAgICAgIGV4cGFuZCA9IGMoMCwgMCkpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gbW9udGhseV9yZWFzb25fcHJpb3JpdGllcyR4Y2VudCwgbGFiZWxzID0gbW9udGhseV9yZWFzb25fcHJpb3JpdGllcyRtb250aCwKICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLCAwKSkgKwogIGNvb3JkX2ZpeGVkKCkgKwogIHRoZW1lX2J3KCkgKyAKICB0aGVtZV9tb3NhaWMKCiNkYXRfcmVkY2FwICU+JSAKICAjc2VsZWN0KENvbW1lbnRzID0gcmVhc29uX290aGVyKSAlPiUgCiAgI2Ryb3BfbmEoQ29tbWVudHMpICU+JSAKICAja2FibGUoKQoKYGBgCgoKCjwhLS10YWIgNy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+ICAKIyMgVG8gam9pbiB0aGlzIHN0dWR5IAoqKiogIApPbiBiZWhhbGYgb2YgdGhlIENhbmFkaWFuIENyaXRpY2FsIENhcmUgVHJpYWxzIEdyb3VwIGFuZCBDYW5hZGlhbiBDcml0aWNhbCBDYXJlIFJlc2VhcmNoIENvb3JkaW5hdG9ycyBncm91cCwgd2UgaW52aXRlIHlvdXIgc2l0ZSB0byBwYXJ0aWNpcGF0ZSBpbiBhIHNob3J0IGxvbmdpdHVkaW5hbCBzdXJ2ZXkgb2YgdGhlIGVmZmVjdHMgb2YgQ09WSUQtMTkgb24gY3JpdGljYWwgY2FyZSByZXNlYXJjaC4gCgoKVXNlIHRoaXMgbGluayB0byBzZW5kIHVzIHRoZSBuYW1lIGFuZCBlbWFpbCBvZiB0aGUgcGVyc29uIHdobyB3aWxsIGNvbXBsZXRlIHRoZSBzdXJ2ZXkgb24gYmVoYWxmIG9mIHlvdXIgY2VudHJlOiAgaHR0cDovL2JpdC5seS8zYU5xbzhaICAKVGhleeKAmWxsIHJlY2VpdmUgYSBzZXBhcmF0ZSBlbWFpbCB3aXRoIHRoZSBzdXJ2ZXkgd2l0aGluIDI0IGhvdXJzIGFuZCB3aWxsIGdldDogIAoxKSBBIDMtcXVlc3Rpb24gc3VydmV5IGFib3V0IHlvdXIgSUNVICAKMikgQSBzaG9ydCAoPDEwIG1pbikgbW9udGhseSBzdXJ2ZXkgYWJvdXQgdGhlIGltcGFjdCBvZiBDT1ZJRC0xOSBvbiByZXNlYXJjaCBpbiB5b3VyIElDVSAgCgoqKiogIAojIyBBYm91dCB0aGlzIHN0dWR5CgoqKkJhY2tncm91bmQ6KiogQXMgd2UgcHJlcGFyZSBmb3IgYW5kIG1hbmFnZSBDT1ZJRC0xOSBwYXRpZW50cyBpbiBvdXIgSUNVcywgd2UgcmVhbGl6ZSBib3RoIHRoZSBpbXBvcnRhbmNlIG9mIHN0dWR5aW5nIHRoaXMgZGlzZWFzZSBhbmQgb3VyIHJvbGUgYXMgZ2xvYmFsIGxlYWRlcnMgaW4gY3JpdGljYWwgY2FyZSByZXNlYXJjaC4gIEZyb20gb3VyIGV4cGVyaWVuY2VzIHdpdGggU0FSUyBhbmQgSDFOMSwgd2UgYWxzbyBrbm93IHRoYXQgQ09WSUQtMTkgbWF5IGJvdGggZW5oYW5jZSBhbmQgY29uc3RyYWluIGN1cnJlbnQgY3JpdGljYWwgY2FyZSByZXNlYXJjaCBwcm9qZWN0cy4gIAogIAoqKk9iamVjdGl2ZXM6KiogVGhlIGFpbXMgb2YgdGhpcyBzdHVkeSBhcmUgdG86ICAKMS4gQ2hhcmFjdGVyaXplIGN1cnJlbnQgcmVzZWFyY2ggYWN0aXZpdGllcyBpbiBJQ1VzICAKMi4gRGVzY3JpYmUgdGhlIGVmZmVjdHMgb2YgQ09WSUQtMTkgKGFuZCBwcmVwYXJhdGlvbnMpIG9uIHJlc2VhcmNoIGluIElDVXMsIHNwZWNpZmljYWxseSB0bzogaWRlbnRpZnkgbmV3IHJlc2VhcmNoIHN0YXJ0ZWQgZHVlIHRvIENPVklELTE5OyBkZXNjcmliZSBhbnkgaW1wYWN0IG9uIGV4aXN0aW5nIHJlc2VhcmNoIGFjdGl2aXRpZXM7IGFuZCBpZGVudGlmeSBDT1ZJRC0xOSBob3NwaXRhbCBvciBJQ1UgcG9saWNpZXMgYWZmZWN0aW5nIHJlc2VhcmNoLiAKICAKKipNZXRob2RzOioqIElmIHlvdSBhZ3JlZSBmb3IgeW91ciBzaXRlIHRvIHBhcnRpY2lwYXRlLCB5b3Ugb3IgeW91ciBkZWxlZ2F0ZSB3aWxsIHJlY2VpdmU6ICAK4oCiCUEgbGluayB0byBhIHNpbmdsZSwgYnJpZWYgc3VydmV5ICgzIHF1ZXN0aW9ucykgYWJvdXQgeW91ciBJQ1UgIArigKIJQSBsaW5rIHRvIGEgc2hvcnQgKDwxMCBtaW51dGVzKSBzdXJ2ZXkgYWJvdXQgdGhlIGltcGFjdCBvZiBDT1ZJRC0xOSBvbiByZXNlYXJjaCBpbiB5b3VyIElDVS4gSXQgd2lsbCBiZSBzZW50IG9uIHRoZSBmaXJzdCBvZiB0aGUgbW9udGggZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgQ09WSUQtMTkgb3V0YnJlYWsuICAK4oCiCUEgcmVwb3J0IHN1bW1hcml6aW5nIHRoZSByZXN1bHRzIGFmdGVyIGVhY2ggbW9udGhseSBzdXJ2ZXkgIAoKKipFdGhpY3MgYW5kIHByaXZhY3k6KiogVGhpcyBzdHVkeSBoYXMgYmVlbiByZXZpZXdlZCBieSB0aGUgSGFtaWx0b24gSW50ZWdyYXRlZCBSZXNlYXJjaCBFdGhpY3MgQm9hcmQuIFBhcnRpY2lwYXRpb24gaXMgb2YgY291cnNlIHZvbHVudGFyeSBhbmQgc3VibWl0dGluZyBkYXRhIGltcGxpZXMgeW91ciBjb25zZW50IHRvIHBhcnRpY2lwYXRlIC4gWW91IGNhbiBzdG9wIHBhcnRpY2lwYXRpbmcgYXQgYW55IHRpbWUgYW5kIHByaW9yIHRvIGFuYWx5c2lzIHlvdSBjYW4gd2l0aGRyYXcgYW55IGRhdGEgZnJvbSB5b3VyIGNlbnRyZS4gV2Ugd2lsbCBub3QgcHVibGlzaCBhbnkgc2l0ZSBvciBwZXJzb25hbCBpZGVudGlmeWluZyBpbmZvcm1hdGlvbiB3aXRob3V0IHlvdXIgZXhwcmVzcyBjb25zZW50LiAgCiAgClRoYW5rIHlvdSwgYW5kIHdlIHdlbGNvbWUgYW55IHN1Z2dlc3Rpb25zIGZvciBhZGFwdGluZyBhbmQgdXBkYXRpbmcgdGhpcyBzdXJ2ZXkgYXMgZXZlbnRzIGluIHRoaXMgcGFuZGVtaWMgdW5mb2xkLiAgCiAKKipNYXJrIER1ZmZldHQqKiwgUlBoIFBoRCAgCkRlcGFydG1lbnRzIG9mIFBlZGlhdHJpY3MgYW5kIEhlYWx0aCBSZXNlYXJjaCBNZXRob2RzLCBFdmlkZW5jZSwgYW5kIEltcGFjdCwgTWNNYXN0ZXIgVW5pdmVyc2l0eSwgSGFtaWx0b24sIENhbmFkYS4gZHVmZmV0bWNAbWNtYXN0ZXIuY2EsIEBbTV9EdWZmZXR0XShodHRwOi8vdHdpdHRlci5jb20vTV9EdWZmZXR0KSAgCiAKKipNaWNoZWxsZSBLaG8qKiwgUFQgUGhEICAKU2Nob29sIG9mIFJlaGFiaWxpdGF0aW9uIFNjaWVuY2UsIE1jTWFzdGVyIFVuaXZlcnNpdHksIEhhbWlsdG9uLCBDYW5hZGEuIGtob21lQG1jbWFzdGVyLmNhLCBAW2tob21lXShodHRwOi8vdHdpdHRlci5jb20va2hvbWUpICAKCiAKCg==